An application program or application may create and provide a graphics image. The graphics image may be represented by a bitmap which can be passed on to other applications. Since graphics images can vary in complexity or size, the bitmaps representing graphics images can also vary in complexity or size.
In a server and remote client system, where a server computer supports one or more client computers, a bitmap from the server computer may be broken down into smaller pieces and communicated to the client computer. The client computer may individually display or process each of the smaller bitmap pieces. In other words, to display the larger graphics image, each of the smaller bitmap pieces is processed. A problem for relatively large size bitmaps that are changing or updating at a high rate is a tearing effect seen at the client computer. The tearing effect takes place as the client computer displays each bitmap piece.
If the bitmap is sent at one time (i.e., not broken into the smaller pieces) to the client computer, the client computer may decide how the bitmap may be displayed giving specific constraints (e.g., high update rate) seen at the client computer; however, if the bitmap is sent in its entirety, it may have to be compressed. Compression typically is used to support relatively large size bitmaps. An application running at the server computer may compress the bitmap based on a particular compression format. The compression formats may be lossy, meaning that some information or data is degraded or lost when a bitmap (i.e., graphics image) is compressed.
The bitmap may be communicated or transmitted to the client computer using a particular communication protocol such as Remote Desktop Protocol or RDP. Typically when a communication protocol is used, the compressed bitmap is further decompressed into a standardized uncompressed format to allow a communication protocol encoder to compress the bitmap for transmission to the client computer. This may involve significant and redundant work for the server computer and result in lower compression ratios than were already present in the pre-compressed bitmap (i.e., further degradation of the original bitmap).
Furthermore, when a communication protocol, such as RDP, is implemented, a separate channel or virtual channel may be implemented to provide metadata information related to the bitmap or bitmaps. This separate or virtual channel typically is not synchronous with the bitmaps or graphics stream that includes the bitmaps. It is typical that the bitmaps or the graphics stream, are transmitted over a channel separate from the virtual channel in which metadata is transmitted. This can be a limitation in scenarios where synchronizing the graphics stream with some metadata is desired or required. A specific example of such a limitation with RDP is the lack of information at the client side about window positions and dimensions. If the display of the graphics stream was to be directly affected by window placement, it might be important for changes in window placement to be carefully synchronized with the graphics stream.
In addition, the reassembly of arbitrarily large objects at the client side creates a memory management issue at the client computer. For example, as bitmaps and/or bitmap pieces are received by a client computer, they may be placed in a buffer, then reassembled and processed. However, the buffer at the client computer may not be sufficiently large enough to accommodate the bitmaps and/or bitmap pieces.